#include "service.hpp"

using namespace std;

// 要绑定的端口号通过用户传递的命令行参数获取
// eg: ./server 8080
void usage() {
    cout << "\n\rusage as follows: " "\n\tUsage:./server port" << endl;
}

// 可以通过定义回调函数，灵活的控制服务器对数据的处理
// string handle(const string& date) {
//     time_t t = time(nullptr);
//     struct tm *timeinfo = localtime(&t);
//     char buffer[80];  
//     // 使用strftime格式化时间  
//     // 这里使用了一个常见的日期和时间格式  
//     strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo); 
//     string msg;
//     msg += "[";
//     msg += buffer;
//     msg += " ";
//     msg += "server say]$ ";
//     msg += date;
//     return msg;
// }

string handle(const string& date) {
    FILE *fp = popen(date.c_str(), "r");  
    char buffer[1024];  
    if (fp == NULL) {  
        printf("Failed to run command\n");  
        return "bad cmd";  
    }  
    string msg;
    while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {  
        msg += buffer;  
    }  
    pclose(fp);
    return msg;
}


int main(int argc, char* argv[]) {
    if(argc != 2) {
        usage();
        return 1;
    }
    uint16_t port = atoi(argv[1]);
    // uint16_t port = stoi(port);
    server s(port);
    // 初始化服务器
    s.init();

    // 启动服务器
    s.run(handle);
    return 0;
}